from fastapi import FastAPI, Depends, HTTPException, BackgroundTasks
from sqlalchemy.orm import Session
from typing import List

from . import crud, models, schemas
from .database import SessionLocal, engine, get_db

models.Base.metadata.create_all(bind=engine) # 这适用于简单情况。在生产环境中，请使用Alembic。

app = FastAPI(title="Music Management Service")

@app.post("/search-and-download/", response_model=schemas.Song)
async def search_and_download_song(song_request: schemas.SongCreate, db: Session = Depends(get_db)):
    """
    1. 搜索歌曲。
    2. 如果数据库中不存在，则以"pending"状态添加它。
    3. 触发后台任务进行下载。
    """
    # 这是一个简化的搜索。实际实现将使用yt-dlp进行搜索。
    # 目前，我们假设直接提供了source_url。
    db_song = crud.get_song_by_source_url(db, source_url=song_request.source_url)
    if db_song:
        return db_song
    
    # 如果歌曲不存在，创建它并在后台开始下载
    new_song = crud.create_song(db=db, song=song_request)
    # background_tasks.add_task(download_music_task, new_song.id, db) # 后台任务占位符
    return new_song


@app.get("/songs/", response_model=List[schemas.Song])
def read_songs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
    """
    从数据库中检索歌曲列表。
    """
    songs = db.query(models.Song).offset(skip).limit(limit).all()
    return songs


@app.get("/")
def read_root():
    return {"message": "Music Service is running"} 